package com.collection_;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 1.Map 与 Collection并列存在，用于保存具有映射关系的数据：Key-Value (双列元素)
 * 2.Map 中 key 和 value可以是任何引用类型，会封装到HashMap$Node 对象中
 * 3.Map 中 key 不允许重复
 * 4.Map 中 value 可以重复
 * 5.Map 的 key 可以是null，value 也可以是null，注意key是null，只有一个，value为null 可以多个
 * 6.常用String类作为Map的key
 * 7.
 */
public class Map_ {
    public static void main(String[] args) {
        Map map1 = new HashMap();
        map1.put("No1","星期一");//k-v
        map1.put("No2","星期二");
        map1.put("No1","星期一---");
        map1.put("No3","星期一");//k-v
        map1.put("No4","星期4");
        System.out.println(map1);

        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "value1");
        map.put("2", "value2");
        map.put("3", "value3");

        //第一种：普遍使用，二次取值
        System.out.println("通过Map.keySet遍历key和value：");
        for (String key : map.keySet()) {
            System.out.println("key= "+ key + " and value= " + map.get(key));
        }

        //第二种
        System.out.println("通过Map.entrySet使用iterator遍历key和value：");
        Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //第三种：推荐，尤其是容量大时
        System.out.println("通过Map.entrySet遍历key和value");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        //第四种
        System.out.println("通过Map.values()遍历所有的value，但不能遍历key");
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }
    }
}
